import Vue from 'vue'
import Vuex from 'vuex'
import { MessageBox } from 'mint-ui';

Vue.use(Vuex)

export default new Vuex.Store({
    // 存储状态/数据
    // 一种情况是没有数据/有数据(本地存储中)
    state: {
        cartListDatas: localStorage['carts'] ? JSON.parse(localStorage['carts']) : [],
    },
    // 修改状态/数据
    mutations: {
        // 增加
        changeCartListDatas(state, data) {
            console.log(state);
            console.log(data);
            // 查找是否有店铺,并把店铺的这个对象返回,如果有往goods那个数组中添加商品的信息
            let isShop = state.cartListDatas.find(item => {
                return item.store_id == data.store_id
            })
            console.log(isShop);
            // 存在该商品信息的店铺数据
            let isGoods = state.cartListDatas.find(item => {
                return item.goods.find(value => {
                    return value.goods_id == data.goods[0].goods_id
                })
            })
            console.log(isGoods);
            if (isShop) {
                // 如果有店铺->有没有该商品
                // 有该商品
                if (isGoods) {
                    for (let i = 0; i < isGoods.goods.length; i++) {
                        if (isGoods.goods[i].goods_id == data.goods[0].goods_id) {
                            isGoods.goods[i].goods_number += data.goods[0].goods_number;
                        }
                    }
                } else {
                    isShop.goods.push(data.goods[0])
                }
            } else {
                state.cartListDatas.push(data)
            }
            // 存储到本地存储中
            localStorage.setItem('carts', JSON.stringify(state.cartListDatas));

        },
        // 购车页面中商品数量减少
        minusGoodsNumMu(state, data) {
            console.log(data);
            console.log(state);
            // 找到该数据然后修改, 更新本地存储的数据
            state.cartListDatas[data.storeIndex][data.goodsIndex] = data.cartGoodsItem;
            // 更新本地存储
            localStorage.setItem('carts', JSON.stringify(state.cartListDatas));
        },
        // 购车页面中商品数量增加
        plusGoodsNumMu(state, data) {
            // 找到该数据然后修改, 更新本地存储的数据
            state.cartListDatas[data.storeIndex][data.goodsIndex] = data.cartGoodsItem;
            // 更新本地存储
            localStorage.setItem('carts', JSON.stringify(state.cartListDatas));
        },
        // 商品选中
        goodsSelect(state, data) {
            // 找到该数据然后修改
            state.cartListDatas[data.storeIndex][data.goodsIndex] = data.cartGoodsItem;
            // 关于店铺的影响
            let flag = state.cartListDatas[data.storeIndex].goods.every(item => { return item.is_checked == true });
            // 根据flag对店铺的选中的数据进行更新
            if (flag) {
                state.cartListDatas[data.storeIndex].checked = true;
            } else {
                state.cartListDatas[data.storeIndex].checked = false;
            }
            // 更新本地存储
            localStorage.setItem('carts', JSON.stringify(state.cartListDatas));
        },
        // 店铺的选中
        shopSelect(state, data) {
            // 找到该店铺的信息,然后修改
            state.cartListDatas[data.storeIndex] = data.cartListData;
            // 对商品选中的影响
            let shopFlag = state.cartListDatas[data.storeIndex].checked;
            state.cartListDatas[data.storeIndex].goods.forEach(item => {
                    item.is_checked = shopFlag
                })
                // 更新本地存储
            localStorage.setItem('carts', JSON.stringify(state.cartListDatas));
        },
        // 全选的选中
        selectAll(state, data) {
            // 2.对店铺的影响
            state.cartListDatas.forEach(item => {
                item.checked = data.selectAll;
                // 3.对商品的影响
                item.goods.forEach(value => {
                    value.is_checked = data.selectAll;
                })
            });
            // 更新本地存储
            localStorage.setItem('carts', JSON.stringify(state.cartListDatas));
        },
        // 删除
        delGoods(state, data) {
            MessageBox.confirm('您确定要删除吗?').then(() => {

                state.cartListDatas[data.storeIndex].goods.splice(data.goodsIndex, 1);

                // 对店铺的数据的判定
                // 如果店铺下没有商品了, 那么删除店铺信息
                if (state.cartListDatas[data.storeIndex].goods.length == 0) {
                    state.cartListDatas.splice(data.storeIndex, 1)
                }
                // 再次盘点该店铺下商品是否全部选中
                // console.log(data.storeIndex);
                // console.log(state.cartListDatas);
                // console.log(state.cartListDatas[data.storeIndex]);

                let flag = state.cartListDatas[data.storeIndex] && state.cartListDatas[data.storeIndex].goods.every(item => {
                    return item.is_checked == true;
                })
                if (flag) {
                    state.cartListDatas[data.storeIndex].checked = true;
                }
                // 更新本地存储
                localStorage.setItem('carts', JSON.stringify(state.cartListDatas));

            });
        }
    }, // 可以进行异步操作,可以去请求接口数据,再去使用mutations修改
    actions: {

    },
    // vuex的计算属性
    getters: {

    },
    // 将vuex模块化,使数据管理更加清晰
    modules: {}
})